import java.util.ArrayList;
import java.util.List;


/*
 * @lc app=leetcode.cn id=54 lang=java
 *
 * [54] 螺旋矩阵
 */

// @lc code=start
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res=new ArrayList<>();
        int m=matrix.length;
        int n=matrix[0].length;
        int l=0,r=n-1,up=0,down=m-1;
        while(l<=r&&up<=down){
            //从左到右
            for(int j=l;j<=r;j++){
                res.add(matrix[up][j]);
            }
            //从上往下
            for(int i=up+1;i<=down;i++){
                res.add(matrix[i][r]);
            }
            //看是否还需要继续下去
            if(l<r&&up<down){//避免出现单列或单行时从右往左和从下往上就会和前面重复
                //从右往左
                for(int j=r-1;j>=l;j--){
                    res.add(matrix[down][j]);
                }
                //从下往上
                for(int i=down-1;i>up;i--){
                    res.add(matrix[i][l]);
                }
               
            }
            up++;r--; down--; l++;
        }
        return res;
    }
}
// @lc code=end

